"use strict";
const path = require("path");
const defaultSettings = require("./src/settings.js");

function resolve(dir) {
    return path.join(__dirname, dir);
}

const name = defaultSettings.title || "后台管理系统"; // page title
const CompressionPlugin = require("compression-webpack-plugin");

const port = process.env.port || process.env.npm_config_port || 9528; // dev port

module.exports = {
    publicPath: process.env.NODE_ENV == "production" ? "./storage/assets/cadmin" : "./",
    outputDir: "../gscdj-gyl/storage/app/public/assets/cadmin",
    assetsDir: "static",
    lintOnSave: false,
    productionSourceMap: false,
    devServer: {
        port: port,
        open: false,
        overlay: {
            warnings: false,
            errors: true
        },
        // 代理
        proxy: {
            [process.env.VUE_APP_BASE_API]: {
                target: `http://ncdx.jyt.cadj.cn/Admin`, //志勇
                // target: `http://cdj.local.agent.com/Admin`, //志勇
                ws: true,
                changeOrigin: true,
                pathRewrite: {
                    ["^" + process.env.VUE_APP_BASE_API]: ""
                }
            },
            "/scan_login": {
                target: `http://pay.caidj.cn/scan_login`,
                changeOrigin: true,
                pathRewrite: {
                    "^/scan_login": ""
                }
            },
            "/CustomerService": {
                target: `http://sort.caidj.com/CustomerService`,
                changeOrigin: true,
                pathRewrite: {
                    "^/CustomerService": ""
                }
            }
        }
    },
    configureWebpack: {
        name: name,
        resolve: {
            alias: {
                "@": resolve("src")
            }
        }
    },
    chainWebpack(config) {
        config.plugins.delete("preload");
        config.plugins.delete("prefetch");

        config.module
            .rule("svg")
            .exclude.add(resolve("src/icons"))
            .end();
        config.module
            .rule("icons")
            .test(/\.svg$/)
            .include.add(resolve("src/icons"))
            .end()
            .use("svg-sprite-loader")
            .loader("svg-sprite-loader")
            .options({
                symbolId: "icon-[name]"
            })
            .end();

        config.module
            .rule("vue")
            .use("vue-loader")
            .loader("vue-loader")
            .tap(options => {
                options.compilerOptions.preserveWhitespace = true;
                return options;
            })
            .end();

        config.when(process.env.NODE_ENV === "development", config =>
            config.devtool("cheap-source-map")
        );

        config.when(process.env.NODE_ENV !== "development", config => {
            config
                .plugin("ScriptExtHtmlWebpackPlugin")
                .after("html")
                .use("script-ext-html-webpack-plugin", [{
                    inline: /runtime\..*\.js$/
                }])
                .end();
            config.optimization.splitChunks({
                chunks: "all",
                cacheGroups: {
                    libs: {
                        name: "chunk-libs",
                        test: /[\\/]node_modules[\\/]/,
                        priority: 10,
                        chunks: "initial"
                    },
                    elementUI: {
                        name: "chunk-elementUI",
                        priority: 20,
                        test: /[\\/]node_modules[\\/]_?element-ui(.*)/
                    },
                    commons: {
                        name: "chunk-commons",
                        test: resolve("src/components"), // can customize your rules
                        minChunks: 3, //  minimum common number
                        priority: 5,
                        reuseExistingChunk: true
                    }
                }
            });
            config.optimization.runtimeChunk("single");
        });
    },
    pluginOptions: {
        CompressionPlugin: new CompressionPlugin({
            filename: "[path].gz[query]",
            algorithm: "gzip",
            test: /\.(js|css|html|svg)$/,
            threshold: 0,
            minRatio: 0.7,
            deleteOriginalAssets: true // 删除原文件
        })
    }
};